const cloud = require('wx-server-sdk');
const xlsx = require('node-xlsx')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
});

const db = cloud.database();

// 创建集合云函数入口函数
exports.main = async (event, context) => {
  try {
    // 请求参数
    let {
      conditions
    } = event.data

    if (typeof conditions == "string") {
      // 未传递筛选条件时 conditions会默认等于"1"
      conditions = {}
    }

    // 构建查询条件
    let query = db.collection(conditions.collectionName)
    // 文件名称
    let fileName = `${conditions.title}${new Date().getTime()}.xlsx`

    // 保存查询的类型 list-列表 detail-详情
    let findType = conditions.type
    // 删除不需要的字段
    delete conditions.type
    delete conditions.title
    delete conditions.collectionName

    // 时间范围筛选
    if (conditions.startTime && conditions.endTime) {
      conditions = {
        ...conditions,
        createTime: db.command.gte(new Date(conditions.startTime)) // 大于等于开始时间
          .and(db.command.lte(new Date(conditions.endTime))) // 小于等于结束时间
      }
      delete conditions.startTime
      delete conditions.endTime
    }

    query = query.where(conditions) // 添加筛选条件
    query = query.orderBy('createTime', 'desc') // 排序

    // 导出数据
    const consumeRecord = await query.get()

    let excelData = []
    let header = []
    // 列表数据(日常会员消费记录管理汇总/会员基本资料管理汇总/会员商品折扣管理汇总/会员福利券记录管理汇总/会员优惠券记录管理)
    if (findType == 'list') {
      header = ['会员商家', '姓名', '年龄', '生日', '手机号码', '微信号']
      excelData.push(header)
      consumeRecord.data.forEach(item => {
        let row = []
        row.push(item.userName)
        row.push(item.userName)
        row.push(item.age)
        row.push(item.birthday)
        row.push(item.phone)
        row.push(item.wxId)
        excelData.push(row)
      })
    }


    // 详情数据(消费积分信息/折扣记录信息/福利券记录信息/优惠券记录信息)
    if (findType == 'detail') {
      header = ['注册日期', '推荐人', '默认地址', '收货地址', '联系人', '电话', '其他地址', '收货地址', '联系人', '电话']
      excelData.push(header)
      const items = consumeRecord.data[0]
      let row = []
      row.push(items.registerTime)
      row.push(items.referrerPerson)

      items.addressList.forEach(item => {
        row.push(item.address)
        row.push(item.address)
        row.push(item.contact)
        row.push(item.phone)
      })

      excelData.push(row)
    }


    let buffer = xlsx.build([{
      name: fileName,
      data: excelData
    }]);

    //上传到云存储
    const fileData = await cloud.uploadFile({
      cloudPath: `xlsx/${fileName}`,
      fileContent: buffer
    })

    return {
      code: 200,
      msg: "操作成功",
      data: fileData.fileID,
    }
  } catch (err) {
    console.log("err----", err)
  }
};